# -*- coding: utf-8 -*-
# @Author   : zxc19
# @Time     : 2023/7/6 21:29
# @FileName : url_util.py
# @Desc     : 请输入功能模块描述
import re
from typing import List
from urllib.parse import urljoin


def validate_url(url):
    """
    校验URL正确性
    :param url: URL地址
    :return:
    """
    pattern = re.compile(
        r'^https?://(?:[a-zA-Z0-9]+\.)+[a-zA-Z]{2,6}(?::\d{2,5})?(?:/\S*)?$|^https?://(?:\d{1,3}\.){3}\d{1,3}(?::\d{2,5})?(?:/\S*)?$')
    return bool(pattern.match(url))


def build_full_url(base_url: str, page_url: str) -> str:
    """
    拼接项目base_url和页面url,如果页面url是完整的url则不拼接项目url
    自动处理中间的斜杠，避免出现重复的斜杠导致的错误。
    :param base_url: 项目基础URL
    :param page_url: 页面URL
    :return:
    """
    if validate_url(page_url):
        return page_url
    return urljoin(base_url, page_url)


def build_url(prefix: str, path: str):
    """
    构建url
    :param prefix: 前缀
    :param path: 页面路径
    :return:
    """
    absolute_http_url_regexp = re.compile(r"^https?://", re.I)
    if absolute_http_url_regexp.match(path):
        return path
    else:
        return f"{prefix.rstrip('/')}/{path.lstrip('/')}"


def get_url_host_and_port(url: str) -> List:
    """
    提取URL中的主机地址和端口
    :param url:
    :return:
    """
    if not url.endswith('/'):
        url += '/'
    http_url_regexp = re.compile(r"^https?://(.*?)/", re.I)
    return http_url_regexp.match(url).group(1).split(':')


if __name__ == '__main__':
    print(get_url_host_and_port('https://10.121.110.182/zxc/ass1/'))